Claude Grasland, Université de Paris
On se propose d’analyser la variation d’un phénomène quantitatif (le prix de vente des maisons en € par m2) en fonction de la distance à un point remarquable (le centre de l’agglomération). On fait l’hypothèse que ce prix correspond à un gradient de décroissance, conformément aux théories de la rente foncière. Pour modéliser ce gradient, nous ferons appels à un modèle de régression linéaire ou non-linéaire.
Soit l’ensemble des ventes effectuées dans un rayon de 50 km autour d’une agglomération. Existe-t-il une relation entre (Y) le prix de vente mesuré en € par m2 de surface habitable et (X) la distance au point central de l’agglomération ?
N.B. Nous retirons la commune centre de l’analyse car on suppose que son comportement interne obéit à une logique différente
Nous allons retenir la distance à vol d’oiseau entre chaque point ou a eu lieu une vente et le centre de l’agglomération que l’on fixera en fonction de notre connaissance du terrain.
# Commune centre
codectr<- "35238" # Code
namectr <- "Rennes" # Nom
# Choix du rayon de collecte des dvf (en mètres)
rayon <- 50000
# Dossier de stockage
myrep <- "data/Rennes/"
# Fichier dvf nettoyé
mydvf <-"dvf_clean.RDS"On doit ajouter à notre fichier dvf la distance au point central retenu.
## Warning: st_centroid assumes attributes are constant over geometries
On teste l’existence d’un modèle linéaire en fixant les paramètres suivants :
##
## Call:
## lm(formula = Y ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2309.1 -368.5 -47.0 314.5 5856.8
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 2837.7774 5.9202 479.3 <2e-16 ***
## X -45.1457 0.3075 -146.8 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 633.1 on 50618 degrees of freedom
## Multiple R-squared: 0.2986, Adjusted R-squared: 0.2986
## F-statistic: 2.155e+04 on 1 and 50618 DF, p-value: < 2.2e-16
On teste l’existence d’un modèle exponetielle en fixant les paramètres suivants :
##
## Call:
## lm(formula = Y ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -1.95482 -0.14476 0.02937 0.19630 1.68254
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 7.9791861 0.0031466 2535.8 <2e-16 ***
## X -0.0245287 0.0001635 -150.1 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3365 on 50618 degrees of freedom
## Multiple R-squared: 0.3079, Adjusted R-squared: 0.3079
## F-statistic: 2.252e+04 on 1 and 50618 DF, p-value: < 2.2e-16
On teste l’existence d’un modèle logarithmique en fixant les paramètres suivants :
##
## Call:
## lm(formula = Y ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2820.5 -364.0 -31.8 320.7 5900.1
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 3801.054 12.449 305.3 <2e-16 ***
## X -649.871 4.559 -142.5 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 638.5 on 50618 degrees of freedom
## Multiple R-squared: 0.2864, Adjusted R-squared: 0.2864
## F-statistic: 2.032e+04 on 1 and 50618 DF, p-value: < 2.2e-16
On teste l’existence d’un modèle puissance en fixant les paramètres suivants :
##
## Call:
## lm(formula = Y ~ X)
##
## Residuals:
## Min 1Q Median 3Q Max
## -2.13041 -0.14325 0.04097 0.20474 1.55332
##
## Coefficients:
## Estimate Std. Error t value Pr(>|t|)
## (Intercept) 8.467618 0.006720 1260.1 <2e-16 ***
## X -0.339949 0.002461 -138.1 <2e-16 ***
## ---
## Signif. codes: 0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
##
## Residual standard error: 0.3447 on 50618 degrees of freedom
## Multiple R-squared: 0.2738, Adjusted R-squared: 0.2738
## F-statistic: 1.908e+04 on 1 and 50618 DF, p-value: < 2.2e-16
On décide ici de retenir le modèle 2 (exponentiel) et de stocker les valeurs estimées et résiduelles des prix au m2.
On agrège les valeurs estimées et résiduelles par commune
On en déduit les communes où le prix est plus bas que ce que laisserait prévoir la distance au centre :
| INSEE_COM | nb | prixm2 | prixm2_estim | prixm2_resid |
|---|---|---|---|---|
| 35281 | 1878 | 2435 | 2999 | -564 |
| 35261 | 18 | 1085 | 1571 | -486 |
| 35242 | 37 | 1045 | 1522 | -476 |
| 35244 | 31 | 1093 | 1535 | -443 |
| 35290 | 75 | 1122 | 1554 | -432 |
| 35164 | 80 | 1164 | 1577 | -413 |
Et celles où le prix est plus élevé que ce que laisserait prévoir la distance au centre
| INSEE_COM | nb | prixm2 | prixm2_estim | prixm2_resid |
|---|---|---|---|---|
| 35001 | 655 | 2401 | 2199 | 201 |
| 35069 | 1059 | 2225 | 2016 | 209 |
| 35177 | 486 | 2383 | 2162 | 222 |
| 35152 | 766 | 2200 | 1956 | 243 |
| 35047 | 2012 | 2533 | 2270 | 263 |
| 35051 | 1560 | 3134 | 2720 | 414 |
En se limitant à l’aire urbaine, on va visualiser les résultats du modèle. On commence par effectuer la jointure entre les résultats du modèle de régression et le fonds de carte des communes :
## Joining with `by = join_by(INSEE_COM)`
On peut alors cartographier les prix observés et théoriques :
Et en déduire la carte des résidus :